#!/usr/bin/python
# -*- coding: iso-8859-15 -*-

import commands
import re

class IwCfg:
	def __init__(self,session):
		self.session=session
		self.u=""
		self.result={}
		self.regex=""
		self.result_regex=""

	def iwcfg(self,param):
		# Lancement de la commande avec les droits administrateur
		self.u=commands.getoutput('sudo iwconfig ' +str(param))
		## RECUPERATION des parametres
		if re.search('802.11',self.u):
			self.regex=re.compile('(802.11)([abg]{1})')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		
		if re.search('ESSID',self.u):	
			self.regex=re.compile('(ESSID)[:|=](.*)  ')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]

		if re.search('Mode',self.u):		
			self.regex=re.compile('(Mode)[:|=]([a-zA-Z]*) ')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		
		if re.search('Frequency',self.u):
			self.regex=re.compile('(Frequency)[:|=](.* GHz)  ')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		
		if re.search('Access Point',self.u):
			self.regex=re.compile('(Access Point): ([0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}).*\s*')
			self.result_regex=self.regex.findall(self.u)
			if self.result_regex:
			 	self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		
		if re.search('Bit Rate',self.u):
			self.regex=re.compile('(Bit Rate)[:|=]([0-9\.]{1,4}) [mMkK]{1}b/s.*')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		
		if re.search('Tx-Power',self.u):
			self.regex=re.compile('(Tx-Power)[:|=]([0-9]{1,3} dBm).*')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		
		if re.search('Sensitivity',self.u):
			self.regex=re.compile('(Sensitivity)[:|=]([0-9]{1}/[0-9]{1}).*')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		
		if re.search('Retry',self.u):
			self.regex=re.compile('(Retry:|Retry min limit)[:|=](\d) ')
			self.result_regex=self.regex.findall(self.u)
			#self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		
		if re.search('RTS thr',self.u):
			self.regex=re.compile('(RTS thr)[:|=]([onfONF]{2,3}) *')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]

		if re.search('Fragment thr',self.u):
			self.regex=re.compile('(Fragment thr)[:|=]([onfONF|0-9 A-Z]{2,7}) ')
			self.result_regex=self.regex.findall(self.u)
			#self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		
		
		if re.search('Encryption key',self.u):
			self.regex=re.compile('(Encryption key)[:|=]([onfONF]{2,3}) *')
			self.result_regex=self.regex.findall(self.u)
			if self.result_regex:
				if self.result_regex[0][1]==( 'ON' or 'on'):
					#gestion de la crypto
					self.regex=re.compile('Encryption key[:|=][onON]{2,3} *(.*)Power')
					self.result_regex=self.regex.findall(self.u)
					self.result[self.result_regex[0][0]]=self.result_regex[0][1]
				else:
					self.result[self.result_regex[0][0]]=self.result_regex[0][1]

		if re.search('Power Management',self.u):
			self.regex=re.compile('(Power Management)[:|=]([onfONF]{2,3}) *')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		
		if re.search('Link Quality',self.u):
			self.regex=re.compile('(Link Quality)[:|=]([0-9]{1,3}/100) *')
			self.result_regex=self.regex.findall(self.u)
			if self.result_regex:
				self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		# c'est la puissance du signal qui sera utilisé pour l'image finale :
		if re.search('Signal level',self.u):
			self.regex=re.compile('(Signal level)[:|=](-{0,1}[0-9]{1,3} dBm) *')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		if re.search('Noise level',self.u):
			self.regex=re.compile('(Noise level)[:|=](-{0,1}[0-9]{1,3} dBm) *')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		if re.search('Rx invalid nwid',self.u):
			self.regex=re.compile('(Rx invalid nwid)[:|=]([0-9]{1,3}) *')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		
		if re.search('Rx invalid crypt',self.u):
			self.regex=re.compile('(Rx invalid crypt)[:|=]([0-9]{1,3}) *')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		
		if re.search('Rx invalid frag',self.u):
			self.regex=re.compile('(Rx invalid frag)[:|=]([0-9]{1,3}) *')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		
		if re.search('Tx excessive retries',self.u):
			self.regex=re.compile('(Tx excessive retries)[:|=]([0-9]{1,3}) *')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		
		if re.search('Invalid misc',self.u):
			self.regex=re.compile('(Invalid misc)[:|=]([0-9]{1,3}) *')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		
		if re.search('Missed beacon',self.u):
			self.regex=re.compile('(Missed beacon)[:|=]([0-9]{1,3}) *')
			self.result_regex=self.regex.findall(self.u)
			self.result[self.result_regex[0][0]]=self.result_regex[0][1]
		# tout c'est resultat sont stockés sous formes de dico et renvoyé pour la BDD
		return self.result

if __name__=="__main__":
	# a completer
	test= IwCfg("un")
	result=commands.getoutput('iwconfig')
	regex=re.compile('([\w]{2,8}) *(.*)')
	result_regex=regex.findall(result)
	for elem in result_regex:
		if elem[1]!='no wireless extensions.':
			regex=re.compile('([a-z]{2,4}\d{1})$')
			result_regex=regex.findall(elem[0])
			if result_regex!=[]:
				inter=result_regex
			
			


	#print inter[0]

	print 'interface wifi : '+str(inter[0])

	test.iwcfg(inter[0])
	

	#print test.result
	#print sorted(test.result.items())

	print test.result
	#print sorted(test.result.items())

